/**
 * 
 */
package org.ztest.async;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.function.Supplier;

/**
 * 异步任务执行器
 * <p>
 * 可以实现多重异步回调
 * <pre>
 * Async.run(Runnable).thenAccept(Comsumer).whenComplete(BiConsumer)
 * </pre>
 * @author lhl
 *
 * 2015年7月22日上午10:16:45
 */
public class Async
{
	/**
	 * 异步执行任务，无需返回值
	 * @param task 任务
	 * @param exe 线程池
	 * @return future，可以在该future上执行后续异步操作
	 */
	public static CompletableFuture<Void> run(Runnable task, Executor exe)
	{
		return CompletableFuture.runAsync(task, exe);
	}
	
	/**
	 * 异步执行任务，需要返回值
	 * @param task 任务
	 * @param exe 线程池
	 * @return future，可以在该future上执行后续异步操作
	 */
	public static <T> CompletableFuture<T> run(Supplier<T> task, Executor exe)
	{
		return CompletableFuture.supplyAsync(task, exe);
	}
}
